// VIN校验
// 算法根源：
// 大致是这样车辆识别代码的第9位是检验位，检验位可用0—9中任一数字或字母“X”表示。其它位置的数字和字母代表的意义个厂家含义可能不同，但在VIN码的其他16位字码确定后，按以下方法计算得出第九位的检验位。
// 首先将其它16位中的字母按下列关系转换成数字：
// A=1 B=2 C=3 D=4 E=5 F=6 G=7 H=8 J=1 K=2 L=3 M=4 N=5 P=7 R=9 S=2 T=3 U=4 V=5 W=6 X=7 Y=8 Z=9
// 每个位置都有个加权数：
// 位置：1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// 权数：8 7 6 5 4 3 2 10 * 9 8 7 6 5 4 3 2
// 最后将检验位之外的16位每一位的加权系数乘以此位的对应值，再将各乘积相加，求得的和除以11，所得的余数就是检验位的数值。如果余数为10，则检验位为字母“X”
export const IsCorrectVin = vin => {

	if (!vin || vin.length != 17) {
		return false;
	} else {
		var vinVal = vin.toUpperCase();
		//document.getElementById("vin_"+k).value = vinVal;
		var charToNum = {
			'A': 1,
			'B': 2,
			'C': 3,
			'D': 4,
			'E': 5,
			'F': 6,
			'G': 7,
			'H': 8,
			'J': 1,
			'K': 2,
			'L': 3,
			'M': 4,
			'N': 5,
			'P': 7,
			'R': 9,
			'S': 2,
			'T': 3,
			'U': 4,
			'V': 5,
			'W': 6,
			'X': 7,
			'Y': 8,
			'Z': 9
		};
		var obj = 0;
		var arr = new Array();
		for (var i = 0; i < vinVal.length; i++) {
			var temp = vinVal.charAt(i);

			if (charToNum[temp]) {
				arr[i] = charToNum[temp];
			} else {
				arr[i] = Number(temp);
			}
			if (i == 8) {
				arr[i] = vinVal.charAt(i);
			}

		};
		var a1 = 8;
		for (var i = 0; i < 7; i++) {
			obj += Number(arr[i]) * a1;
			a1--;
		};

		obj += Number(arr[7]) * 10;

		var a2 = 9;
		for (var i = 9; i < 17; i++) {
			obj += Number(arr[i]) * a2;
			a2--;
		};

		var result = Number(obj) % 11;
		if (parseInt(result) === 10) {
			result = 'X';
		}
		if (result == arr[8]) {
			//成功
			return true;
		} else {
			//失败
			return false;
		}
	}
};
